MapStruct একটি জাভা মডেল মেপিং টুল যা ডোমেইন অবজেক্ট এবং DTO (Data Transfer Object) এর মধ্যে ডেটা ম্যাপিং করতে সাহায্য করে। Enum Mapping হল একটি সাধারণ বৈশিষ্ট্য যা ম্যাপস্ট্রাক্টের মাধ্যমে Enum types এর মধ্যে ম্যাপিং করে। Enum Mapping এর মাধ্যমে আপনি একটি Enum টাইপ থেকে অন্য Enum টাইপে বা একটি Enum থেকে String, Integer ইত্যাদিতে ডেটা ট্রান্সফার করতে পারেন।
এই টিউটোরিয়ালে আমরা MapStruct ব্যবহার করে Enum Mapping এর ধারণা এবং উদাহরণ সহ দেখব।
Enum Mapping হল এমন একটি প্রক্রিয়া যেখানে একটি Enum টাইপকে অন্য একটি Enum টাইপে বা অন্য কোনো ডেটা টাইপে (যেমন String বা Integer) ম্যাপ করা হয়। মেভেনের মাধ্যমে একাধিক Enum types এর মধ্যে ম্যাপিং করা সহজ এবং টাইপ সেফ হয়।
MapStruct একটি খুবই শক্তিশালী টুল যা Enum Mapping সম্পন্ন করতে ব্যবহার করা যেতে পারে। এতে আপনি সহজেই Enum থেকে Enum বা Enum থেকে String বা Integer এর মধ্যে ম্যাপিং করতে পারেন।
ধরা যাক আমাদের দুটি Enum রয়েছে: Department এবং DepartmentDTO, যেখানে আমরা একটি Enum টাইপের ভ্যালু অন্য Enum টাইপে ম্যাপ করতে চাই।
public enum Department {
IT,
HR,
FINANCE,
MARKETING;
}
public enum DepartmentDTO {
IT_DEPARTMENT,
HUMAN_RESOURCES,
FINANCE_DEPARTMENT,
MARKETING_DEPARTMENT;
}
MapStruct এর মাধ্যমে আমরা Department Enum কে DepartmentDTO Enum এ ম্যাপ করতে চাই। নিচে এর জন্য Mapper Interface দেওয়া হয়েছে:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface DepartmentMapper {
DepartmentMapper INSTANCE = Mappers.getMapper(DepartmentMapper.class);
@Mapping(source = "department", target = "departmentDTO")
DepartmentDTO departmentToDepartmentDTO(Department department);
}
এখানে:
source
এবং target
নির্ধারণ করা হয়েছে।আপনি যখন Enum থেকে String বা Integer এ ম্যাপিং করতে চান, তখন আপনি MapStruct এর @ValueMapping অ্যানোটেশন ব্যবহার করতে পারেন।
ধরা যাক, আমরা Department Enum এর ভ্যালুগুলি String এ ম্যাপ করতে চাই।
@Mapper
public interface DepartmentMapper {
DepartmentMapper INSTANCE = Mappers.getMapper(DepartmentMapper.class);
@Mapping(source = "department", target = "departmentName")
String departmentToString(Department department);
}
এখানে, departmentToString মেথডটি Department Enum এর মানকে String এ কনভার্ট করবে।
যদি আপনি Department Enum কে Integer এ ম্যাপ করতে চান (যেমন Enum এর একটি নির্দিষ্ট মানের জন্য Integer ভ্যালু ফেরত দিতে), তাহলে এটি এভাবে করা যেতে পারে:
@Mapper
public interface DepartmentMapper {
DepartmentMapper INSTANCE = Mappers.getMapper(DepartmentMapper.class);
@Mapping(target = "departmentCode", expression = "java(department.ordinal())")
Integer departmentToInteger(Department department);
}
এখানে, ordinal() মেথড ব্যবহার করে Enum এর মানের অবস্থানকে Integer ভ্যালু হিসেবে ব্যবহার করা হয়েছে। উদাহরণস্বরূপ, IT Enum এর অবস্থান হবে 0
, HR এর অবস্থান হবে 1
ইত্যাদি।
কিছু ক্ষেত্রে, আপনি কাস্টম ম্যাপিং যুক্ত করতে পারেন যেখানে Enum এর এক ধরনের মানকে অন্য ধরনের মানে ম্যাপ করতে হয়, যেমন Enum এর নাম পরিবর্তন বা কোনো অতিরিক্ত লজিক প্রয়োগ করা।
@Mapper
public interface DepartmentMapper {
DepartmentMapper INSTANCE = Mappers.getMapper(DepartmentMapper.class);
@Mapping(target = "departmentDTO", expression = "java(mapDepartment(department))")
DepartmentDTO departmentToDepartmentDTO(Department department);
default DepartmentDTO mapDepartment(Department department) {
switch (department) {
case IT: return DepartmentDTO.IT_DEPARTMENT;
case HR: return DepartmentDTO.HUMAN_RESOURCES;
case FINANCE: return DepartmentDTO.FINANCE_DEPARTMENT;
case MARKETING: return DepartmentDTO.MARKETING_DEPARTMENT;
default: throw new IllegalArgumentException("Unknown department: " + department);
}
}
}
এখানে, mapDepartment মেথডে Department Enum এর মানকে কাস্টমভাবে DepartmentDTO Enum এ ম্যাপ করা হয়েছে।
MapStruct এর মাধ্যমে Enum Mapping খুবই সহজ এবং টাইপ সেফ। আপনি Enum থেকে Enum, Enum থেকে String, বা Enum থেকে Integer বা কাস্টম টাইপে ম্যাপিং করতে পারবেন। MapStruct compile-time এ কোড জেনারেট করে, তাই এটি দ্রুত এবং পারফরম্যান্সে উপযোগী। কাস্টম ম্যাপিংয়ের জন্য আপনি default methods এবং expressions ব্যবহার করতে পারেন, যা একাধিক Enum মানের মধ্যে সুনির্দিষ্ট লজিক প্রয়োগে সাহায্য করে।
Enum (Enumeration) একটি বিশেষ ধরনের ডেটা টাইপ যা নির্দিষ্ট সংখ্যক কনস্ট্যান্ট ভ্যালু ধারণ করে। Java তে Enum একটি ক্লাসের মতো কাজ করে তবে এটি কেবল একটি পূর্বনির্ধারিত সীমিত সেটের ভ্যালু ধারণ করে। Enum সাধারণত ফ্ল্যাগ, স্টেট, কন্ডিশন বা ডোমেইন টাইপ প্রতিনিধিত্ব করার জন্য ব্যবহৃত হয়।
MapStruct Enum ম্যাপিংয়ের জন্য একটি শক্তিশালী সমাধান প্রদান করে। MapStruct ব্যবহার করে, আপনি সহজেই একটি Enum টাইপকে অন্য Enum টাইপে বা String, Integer ইত্যাদি ভ্যালুতে ম্যাপ করতে পারেন।
এখানে Enum Mapping এর ব্যবহার এবং উদাহরণ আলোচনা করা হবে।
Enum হল একটি ডাটা টাইপ যা নির্দিষ্ট সংখ্যক নামকরা কনস্ট্যান্ট ভ্যালু ধারণ করে। Java তে Enum ক্লাসগুলি একটি নির্দিষ্ট অবস্থার মধ্যে থাকা কনস্ট্যান্টের সংগ্রহ হিসেবে ব্যবহৃত হয়। উদাহরণস্বরূপ, Days নামে একটি Enum ক্লাস হতে পারে যা সপ্তাহের সাতটি দিন ধারণ করে: সোমবার, মঙ্গলবার, বুধবার, ইত্যাদি।
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
এখানে, Day
নামক Enum সপ্তাহের সাতটি দিন প্রতিনিধিত্ব করছে।
MapStruct ব্যবহার করে Enum এর মানগুলো একটি Enum থেকে অন্য Enum বা অন্য ডেটা টাইপে (যেমন String, Integer) ম্যাপ করা যায়। এটি একটি সাধারণ ম্যাপিং প্রক্রিয়া যেখানে আপনি কাস্টম কনভার্টার তৈরি করতে পারেন বা স্বয়ংক্রিয়ভাবে ম্যাপিং করতে পারেন।
ধরা যাক, আমাদের দুটি Enum রয়েছে: Day এবং DayDTO। আমরা Day
Enum থেকে DayDTO
Enum এ ম্যাপিং করতে চাই।
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public enum DayDTO {
MON, TUE, WED, THU, FRI, SAT, SUN
}
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface DayMapper {
DayMapper INSTANCE = Mappers.getMapper(DayMapper.class);
@Mapping(source = "MONDAY", target = "MON")
@Mapping(source = "TUESDAY", target = "TUE")
DayDTO dayToDayDTO(Day day);
}
এখানে, @Mapping অ্যানোটেশন ব্যবহার করে আমরা Day
Enum এর প্রতিটি মানকে DayDTO
Enum এর সংশ্লিষ্ট মানে ম্যাপ করেছি।
এখন, যদি আপনি Enum কে একটি String ভ্যালুতে ম্যাপ করতে চান, তাহলে এটি খুব সহজ। নিচে একটি উদাহরণ দেওয়া হল যেখানে Day
Enum থেকে String এ ম্যাপ করা হচ্ছে।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface DayMapper {
DayMapper INSTANCE = Mappers.getMapper(DayMapper.class);
@Mapping(source = "MONDAY", target = "Monday")
@Mapping(source = "TUESDAY", target = "Tuesday")
String dayToString(Day day);
}
এখানে, Day
Enum এর মান String
এ ম্যাপ করা হয়েছে, যেখানে MONDAY
কে "Monday"
, TUESDAY
কে "Tuesday"
তে ম্যাপ করা হচ্ছে।
কখনও কখনও Enum মানগুলোকে ইন্টিজার (Integer) টাইপে ম্যাপ করতে হতে পারে। MapStruct এই ধরনের কনভার্সনও সহজেই করতে পারে।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface DayMapper {
DayMapper INSTANCE = Mappers.getMapper(DayMapper.class);
@Mapping(source = "MONDAY", target = "1")
@Mapping(source = "TUESDAY", target = "2")
int dayToInteger(Day day);
}
এখানে, Day
Enum এর মানগুলিকে সংশ্লিষ্ট Integer ভ্যালুতে ম্যাপ করা হয়েছে (যেমন, MONDAY
কে 1
, TUESDAY
কে 2
).
আপনি যদি আরো কাস্টম কনভার্সন বা ম্যাপিং চান, তবে MapStruct এর মাধ্যমে কাস্টম ম্যাপিং ফাংশনও তৈরি করতে পারেন। উদাহরণস্বরূপ, যদি Enum এর মধ্যে কোনো কাস্টম লজিক প্রয়োগ করতে হয়, যেমন কিছু কন্ডিশনাল ম্যাপিং, তবে আপনি কাস্টম কনভার্টার তৈরি করতে পারেন।
ধরা যাক, আপনার Enum ক্লাসে কিছু কাস্টম লজিক প্রয়োগ করতে হবে, যেমন Day Enum এর জন্য, "Weekend" এবং "Weekday" এর মধ্যে ভাগ করা।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
@Mapper
public interface DayMapper {
DayMapper INSTANCE = Mappers.getMapper(DayMapper.class);
@Mapping(source = "day", target = "type", qualifiedByName = "dayToType")
DayDTO dayToDayDTO(Day day);
@Named("dayToType")
default String dayToType(Day day) {
if (day == Day.SATURDAY || day == Day.SUNDAY) {
return "Weekend";
}
return "Weekday";
}
}
এখানে, আমরা Custom Mapping ফাংশন dayToType
তৈরি করেছি, যা Day Enum কে "Weekend" বা "Weekday" তে কনভার্ট করবে।
MapStruct একটি শক্তিশালী টুল যা Java প্রোজেক্টে Enum Mapping সহজ করে তোলে। আপনি Enum টাইপ থেকে String, Integer বা অন্য কোনো টাইপে ম্যাপিং করতে পারেন এবং প্রয়োজনে কাস্টম ম্যাপিং ফাংশনও তৈরি করতে পারেন। MapStruct এর মাধ্যমে Enum ম্যাপিং প্রক্রিয়াটি দ্রুত, সঠিক এবং পারফরম্যান্সে উপকারী হয়, কারণ এটি compile-time কোড জেনারেশন ব্যবহার করে এবং Reflection এর প্রয়োজন পড়ে না।
MapStruct হল একটি powerful framework যা Java প্রোজেক্টে Object Mapping সহজ করে তোলে। যখন আপনার ডোমেইন অবজেক্টগুলির মধ্যে enum values ট্রান্সফার করার প্রয়োজন হয়, তখন MapStruct আপনাকে সহজ এবং কার্যকরী উপায়ে Enum Mapping সম্পন্ন করতে সহায়তা করে।
Enum Mapping হল এমন একটি প্রক্রিয়া যেখানে এক ধরনের enum কে অন্য ধরনের enum এ ম্যাপ করা হয়। উদাহরণস্বরূপ, আপনি যদি একটি enum-এ থাকা মানগুলিকে অন্য একটি enum-এ ম্যাপ করতে চান, তবে MapStruct এই কাজটি অটোমেটিকভাবে করে দিতে পারে।
এখানে আমরা MapStruct এর মাধ্যমে Enum Mapping করার একটি উদাহরণ দেখব।
যখন আপনার প্রোজেক্টে বিভিন্ন ধরনের enum (যেমন, Status
, Gender
, Type
ইত্যাদি) থাকে এবং আপনি এগুলোর মধ্যে ডেটা ট্রান্সফার করতে চান, তখন Enum Mapping গুরুত্বপূর্ণ। MapStruct এর মাধ্যমে আপনি সহজেই এক enum থেকে অন্য enum এ মান স্থানান্তর করতে পারবেন, যা কোডের পরিস্কারতা ও কার্যকারিতা উন্নত করে।
ধরা যাক, আপনার দুটি enum রয়েছে, একটি GenderEnum এবং একটি GenderDTO।
public enum GenderEnum {
MALE,
FEMALE,
OTHER
}
public enum GenderDTO {
M,
F,
O
}
এখানে, GenderEnum
এর মানগুলিকে GenderDTO
তে ম্যাপ করতে হবে। মানে, MALE
হবে M
, FEMALE
হবে F
, এবং OTHER
হবে O
।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface GenderMapper {
GenderMapper INSTANCE = Mappers.getMapper(GenderMapper.class);
// Mapping GenderEnum to GenderDTO
@Mapping(source = "MALE", target = "M")
@Mapping(source = "FEMALE", target = "F")
@Mapping(source = "OTHER", target = "O")
GenderDTO genderEnumToGenderDTO(GenderEnum genderEnum);
}
এখানে, @Mapping
অ্যানোটেশন ব্যবহার করে GenderEnum এর মানগুলো GenderDTO এর মানে ম্যাপ করা হয়েছে।
public class Main {
public static void main(String[] args) {
GenderEnum genderEnum = GenderEnum.MALE;
// Map GenderEnum to GenderDTO
GenderDTO genderDTO = GenderMapper.INSTANCE.genderEnumToGenderDTO(genderEnum);
System.out.println("Mapped GenderDTO: " + genderDTO);
}
}
এখানে, MapStruct এর মাধ্যমে GenderEnum এর মান GenderDTO এ ম্যাপ করা হয়েছে। MALE মানটি M তে, FEMALE মানটি F তে এবং OTHER মানটি O তে ম্যাপ হবে।
কখনও কখনও, আপনার enum এর মধ্যে কিছু কাস্টম কনভার্সন লজিক প্রয়োজন হতে পারে। MapStruct আপনাকে custom mapping methods তৈরি করতে সহায়তা করে।
public enum StatusEnum {
ACTIVE,
INACTIVE,
PENDING
}
public enum StatusDTO {
A, // Active
I, // Inactive
P // Pending
}
এখানে, আপনি StatusEnum এর মানগুলো StatusDTO এ কাস্টম ম্যাপ করতে চান।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface StatusMapper {
StatusMapper INSTANCE = Mappers.getMapper(StatusMapper.class);
@Mapping(source = "ACTIVE", target = "A")
@Mapping(source = "INACTIVE", target = "I")
@Mapping(source = "PENDING", target = "P")
StatusDTO statusEnumToStatusDTO(StatusEnum statusEnum);
}
এখানে, কাস্টম ম্যাপিংয়ের মাধ্যমে StatusEnum থেকে StatusDTO এ মান ট্রান্সফার করা হচ্ছে। ACTIVE → A, INACTIVE → I, এবং PENDING → P।
আপনি যদি enum ম্যাপিং করতে চান এবং এটি collections (List, Set) বা arrays এর মধ্যে প্রয়োগ করতে চান, তবে MapStruct এই ধরনের ম্যাপিং সমর্থন করে। এটি আপনাকে সহজেই List থেকে List এ ম্যাপিং করতে সাহায্য করে।
import java.util.List;
public class Main {
public static void main(String[] args) {
List<GenderEnum> genderList = List.of(GenderEnum.MALE, GenderEnum.FEMALE, GenderEnum.OTHER);
// Map List of GenderEnum to List of GenderDTO
List<GenderDTO> genderDTOList = GenderMapper.INSTANCE.genderEnumListToGenderDTOList(genderList);
genderDTOList.forEach(gender -> System.out.println("Mapped GenderDTO: " + gender));
}
}
এখানে, List কে List এ ম্যাপ করা হয়েছে।
MapStruct এর মাধ্যমে Enum Mapping অত্যন্ত সহজ এবং কার্যকর। এটি ডোমেইন অবজেক্ট এবং DTO এর মধ্যে enum values ট্রান্সফার করতে সহায়তা করে, এবং কাস্টম ম্যাপিং বা কনভার্সন লজিক প্রয়োগ করা সম্ভব হয়। MapStruct আপনাকে compile-time কোড জেনারেশন, টাইপ সেফটি, এবং no reflection সুবিধা প্রদান করে, যা পারফরম্যান্স এবং ডেভেলপমেন্টে অনেক সুবিধা দেয়। এর মাধ্যমে আপনি enum গুলির মধ্যে ম্যাপিং খুব সহজে এবং দক্ষতার সাথে করতে পারবেন।
MapStruct একটি শক্তিশালী টুল যা JavaBeans এবং DTO (Data Transfer Objects) এর মধ্যে ম্যাপিং কাজ সম্পন্ন করে। Enum Mapping MapStruct এর মাধ্যমে খুবই সহজ এবং কার্যকরীভাবে করা যেতে পারে। Enum হল একটি ডাটা টাইপ যা সীমিত সংখ্যক কনস্ট্যান্ট ভ্যালু ধারণ করে। কখনও কখনও, আমাদের প্রয়োজন হয় একটি String কে Enum এ এবং আবার একটি Enum কে String এ ম্যাপ করার, যা MapStruct সহজে সমাধান করে।
এখানে, আমরা দেখব কিভাবে String থেকে Enum এবং Enum থেকে String ম্যাপিং করা যায় MapStruct এর মাধ্যমে।
Enum ম্যাপিং তখন প্রয়োজন হয় যখন আপনি একটি String ভ্যালুকে একটি Enum ভ্যালুতে কনভার্ট করতে চান বা বিপরীতটি করতে চান, উদাহরণস্বরূপ:
এটি সাধারণত DTOs এবং Entity Models এর মধ্যে ডেটা এক্সচেঞ্জে ব্যবহৃত হয়, যেখানে String এবং Enum এর মধ্যে সঠিক রূপান্তর নিশ্চিত করা প্রয়োজন।
ধরা যাক আমাদের একটি Status
নামক enum রয়েছে এবং আমরা এটি একটি স্ট্রিং হিসেবে মান গ্রহণ বা ফেরত দিতে চাই।
Status
)public enum Status {
ACTIVE,
INACTIVE,
PENDING;
}
এখানে, Status
নামক enum তে তিনটি ভ্যালু আছে: ACTIVE
, INACTIVE
, PENDING
।
public class UserDTO {
private String name;
private Status status; // This will be mapped from String or vice versa
// Getters and Setters
}
এখানে, UserDTO
ক্লাসে একটি Status
enum রয়েছে যা ম্যাপ হবে String থেকে এবং এর বিপরীতে।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper
public interface UserMapper {
// String to Enum mapping
@Mapping(source = "status", target = "status")
UserDTO userToUserDTO(User user);
// Enum to String mapping
@Mapping(source = "status", target = "status")
User userDTOToUser(UserDTO userDTO);
}
এখানে, MapStruct ব্যবহার করা হয়েছে status
ফিল্ডের জন্য String থেকে Enum এবং Enum থেকে String ম্যাপিং করতে। MapStruct স্বয়ংক্রিয়ভাবে ACTIVE
, INACTIVE
, PENDING
এর মতো স্ট্রিংগুলোকে Status enum এ এবং enum মানগুলোকে স্ট্রিং এ ম্যাপ করবে।
public class User {
private String name;
private String status; // This is a String value that will be converted to Enum
// Getters and Setters
}
এখানে, User
ক্লাসের status
একটি স্ট্রিং হিসাবে সংরক্ষিত হবে, যা Status Enum এর সাথে ম্যাপ হবে।
এখন, উদাহরণস্বরূপ, নিচের মতো একটি কনভার্সন প্রক্রিয়া চলবে।
public class Main {
public static void main(String[] args) {
User user = new User();
user.setName("John Doe");
user.setStatus("ACTIVE");
UserMapper userMapper = Mappers.getMapper(UserMapper.class);
// String to Enum mapping
UserDTO userDTO = userMapper.userToUserDTO(user);
System.out.println("Mapped UserDTO Status (Enum): " + userDTO.getStatus());
// Enum to String mapping
User userFromDTO = userMapper.userDTOToUser(userDTO);
System.out.println("Mapped User Status (String): " + userFromDTO.getStatus());
}
}
এখানে, MapStruct দুটি ম্যাপিং অপারেশন সম্পন্ন করবে:
user.setStatus("ACTIVE")
এর মাধ্যমে ACTIVE
স্ট্রিংটি Status.ACTIVE
Enum এ ম্যাপ হবে।userDTO.getStatus()
এর মাধ্যমে Enum মানটি ACTIVE
স্ট্রিং হিসেবে ফেরত আসবে।Mapped UserDTO Status (Enum): ACTIVE
Mapped User Status (String): ACTIVE
এখানে, প্রথমে String থেকে Enum এবং তারপর Enum থেকে String সফলভাবে ম্যাপ করা হয়েছে।
ম্যাপস্ট্রাক্টে String to Enum এবং Enum to String ম্যাপিং কাস্টম লজিক দিয়ে কাস্টমাইজও করা যেতে পারে। উদাহরণস্বরূপ, যদি আপনি একটি String এর মানের উপর ভিত্তি করে Enum ভ্যালু ম্যাপ করতে চান, তাহলে MapStruct এর মাধ্যমে @Mapping অ্যানোটেশনের সাহায্যে কাস্টম ম্যাপিং করা সম্ভব।
@Mapper
public interface UserMapper {
// Custom Mapping from String to Enum with custom logic
@Mapping(source = "status", target = "status")
@Mapping(target = "status", expression = "java(mapStatus(user.getStatus()))")
UserDTO userToUserDTO(User user);
default Status mapStatus(String status) {
switch (status.toUpperCase()) {
case "ACTIVE":
return Status.ACTIVE;
case "INACTIVE":
return Status.INACTIVE;
default:
return Status.PENDING; // Default case
}
}
}
এখানে, mapStatus
মেথডটি কাস্টম ম্যাপিং লজিক সরবরাহ করছে, যা String এর উপর ভিত্তি করে Enum ভ্যালু নির্ধারণ করে।
MapStruct এর মাধ্যমে String থেকে Enum এবং Enum থেকে String ম্যাপিং খুবই সহজ এবং কার্যকরীভাবে করা যায়। @Mapping অ্যানোটেশন ব্যবহার করে আপনি সাধারণ ম্যাপিং এবং কাস্টম ম্যাপিং উভয়ই করতে পারেন। কাস্টম ম্যাপিংয়ের মাধ্যমে আপনি আপনার ডোমেইন অনুযায়ী লজিক প্রয়োগ করতে পারেন এবং String
এর ভিত্তিতে Enum মান নির্ধারণ করতে পারেন।
MapStruct একটি শক্তিশালী টুল যা JavaBeans (POJOs) এর মধ্যে ম্যাপিং সহজ করে এবং এর মাধ্যমে আপনাকে কাস্টম ম্যাপিং, ডেটা কনভার্সন এবং ম্যাপিং এক্সপ্রেশন পরিচালনা করতে সহায়তা করে। Enum Mapping হল MapStruct এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা আপনাকে String থেকে Enum এবং Enum থেকে String এ ম্যাপিং করতে সহায়তা করে।
Enum Mapping তখন প্রয়োজন হয় যখন আপনি String অথবা Integer এর মানকে একটি Enum এ ম্যাপ করতে চান অথবা Enum এর মানকে অন্য কোনো টাইপে (যেমন, String বা Integer) রূপান্তর করতে চান।
MapStruct এর মাধ্যমে Enum Mapping খুবই সহজ, এবং এটি @Mapping অ্যানোটেশন ব্যবহার করে পরিচালিত হয়।
ধরা যাক, আমাদের একটি Status নামক Enum রয়েছে এবং আমাদের লক্ষ্য হল, String বা Integer মান থেকে এই Enum মানে ম্যাপিং করা।
public enum Status {
ACTIVE,
INACTIVE,
PENDING;
}
এখানে, আমাদের Status নামক একটি Enum রয়েছে, যা তিনটি মান ধারণ করে: ACTIVE
, INACTIVE
, এবং PENDING
।
public class UserDTO {
private String status;
// Getter and Setter
}
এখানে, UserDTO ক্লাসে একটি status
নামক String প্রপার্টি রয়েছে, যেটি Status Enum এর সাথে ম্যাপ করা হবে।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
@Mapping(source = "status", target = "status")
UserDTO userToUserDTO(User user);
@Mapping(source = "status", target = "status")
User userDTOToUser(UserDTO userDTO);
}
এখানে, UserMapper ইন্টারফেসে status
প্রপার্টি ম্যাপিং করা হচ্ছে, যা String থেকে Enum এবং Enum থেকে String এর মধ্যে কনভার্ট হবে।
public class User {
private Status status;
// Getter and Setter
}
এখানে, User ক্লাসে Status নামক Enum টাইপের প্রপার্টি রয়েছে।
public class Main {
public static void main(String[] args) {
User user = new User();
user.setStatus(Status.ACTIVE);
// Mapping
UserDTO userDTO = UserMapper.INSTANCE.userToUserDTO(user);
System.out.println("Mapped Status in DTO: " + userDTO.getStatus());
// Reversing the mapping
User userMappedBack = UserMapper.INSTANCE.userDTOToUser(userDTO);
System.out.println("Mapped Status back in User: " + userMappedBack.getStatus());
}
}
এখানে, User অবজেক্টের status প্রপার্টি ACTIVE হিসেবে সেট করা হচ্ছে এবং তারপর UserMapper এর মাধ্যমে এটি UserDTO তে ম্যাপ করা হচ্ছে।
MapStruct এর মাধ্যমে আপনি String থেকে Enum এবং Enum থেকে String ম্যাপিং করতে পারেন, যখন আপনার প্রয়োজন হয় Enum এর মানকে String হিসেবে রূপান্তর করার অথবা String এর মানকে Enum হিসেবে রূপান্তর করার।
@Mapping(source = "status", target = "status")
UserDTO userToUserDTO(User user);
default Status map(String value) {
return Status.valueOf(value.toUpperCase());
}
এখানে, map() মেথড ব্যবহার করে String কে Enum তে ম্যাপ করা হচ্ছে।
@Mapping(source = "status", target = "status")
User userDTOToUser(UserDTO userDTO);
default String map(Status status) {
return status.name();
}
এখানে, map() মেথড ব্যবহার করে Enum কে String তে ম্যাপ করা হচ্ছে।
MapStruct এর সাহায্যে আপনি কাস্টম Enum Mapping করতে পারেন, যেখানে Enum এর মান পরিবর্তন করতে চাইলে আপনি @ValueMapping অ্যানোটেশন ব্যবহার করতে পারেন।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ValueMapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
@Mapping(source = "status", target = "status")
UserDTO userToUserDTO(User user);
@ValueMapping(source = "ACTIVE", target = "A")
@ValueMapping(source = "INACTIVE", target = "I")
@ValueMapping(source = "PENDING", target = "P")
String map(Status status);
}
এখানে, @ValueMapping অ্যানোটেশন ব্যবহার করে Enum এর বিভিন্ন মানের সাথে কাস্টম স্ট্রিং মান ম্যাপ করা হয়েছে।
MapStruct এর মাধ্যমে Enum Mapping খুবই সহজ এবং কার্যকরী। এটি আপনাকে Enum এবং String এর মধ্যে ম্যাপিং করতে সহায়তা করে এবং আপনি কাস্টম ম্যাপিং লজিক প্রয়োগ করতে পারেন। MapStruct এর @Mapping এবং @ValueMapping অ্যানোটেশন ব্যবহার করে Enum এর মানকে String বা অন্য কোনো টাইপে ম্যাপ করা যেতে পারে, যা ডেটা ট্রান্সফারের জন্য অত্যন্ত গুরুত্বপূর্ণ। String থেকে Enum এবং Enum থেকে String ম্যাপিং এর মাধ্যমে আপনি আপনার ডোমেইন অবজেক্টের ডেটা কনভার্সন আরো সহজ এবং সুষ্ঠু করতে পারেন।
Read more